package caj.springboot.model.mapstruct;

import caj.springboot.model.dto.log.LogInsertDTO;
import caj.springboot.model.dto.log.LogUpdateDTO;
import caj.springboot.model.po.Log;
import caj.springboot.model.vo.LogVO;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;

/**
 * @description: 日志转化类
 * @author: CAJ
 * @time: 2025/08/29 14:32
 */
@Mapper(componentModel = "spring", // 使用Spring的组件模型，生成的实现类会被注入Spring容器
        uses = CentralMappingConverter.class) // 使用通用的中央转换器，这里我想如果有中央转换器无法转化的，则继承中央转换器单独创建转换器进行转换，比如枚举类型
public interface LogConverterMapper {

    // @Mapping(target = "typeCode", source = "dataType.code")
    // 在反向映射时，source = "dataType.code" 这种点表达式，MapStruct 会自动调用枚举对象的 getCode() 方法，不需要额外编写转换器
    @Mapping(target = "createTime", source = "createTime", qualifiedByName = "formatDateTime")
    @Mapping(target = "updateTime", source = "updateTime", qualifiedByName = "formatDateTime")
    LogVO logPOToVO(Log log);

    Log logInsertDTOToPO(LogInsertDTO dto);

    Log logUpdateDTOToPO(LogUpdateDTO dto);

}
